//
//  ViewController.swift
//  FMSJ
//
//  Created by ken on 2018/5/26.
//  Copyright © 2018年 ken. All rights reserved.
//

import UIKit
import BDBox
import CoreBluetooth

var Countdown = 0// 倒计时

class ViewController: UIViewController {
    
    @IBOutlet weak var countdownLabel: UILabel!
    // 通道
    var aisle = "01"
    // 连接盒子
    @IBOutlet weak var connectBtn: UIButton!
    
    @IBOutlet weak var logText: UITextView!
    
    @IBOutlet weak var titleLabel: UILabel!
    
    @IBOutlet weak var carNumberTextField: UITextField!
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        
        Bluetooth.delegate = self as? BluetoothToolsDelegate
        
        self.carNumberTextField.text = "184035"
        self.view.addGestureRecognizer(UITapGestureRecognizer(target: self.view, action: #selector(self.view.endEditing(_:))))
    }
    
//    连接盒子
    @IBAction func connect() {
        Bluetooth.connect()
    }

    @IBAction func on() {
        self.sendMessage("1FF")
    }
    
    @IBAction func off() {
        self.sendMessage("1FE")
    }
    
    func sendMessage(_ msg:String) {
        print(msg+aisle)
        let carNumber = carNumberTextField.text!
        if carNumber == "" {
            PLog("请输入卡号")
            return;
        }
        PLog(carNumber + ":" + msg+aisle)
        Bluetooth.boxMsg.sendMessage(boxId: carNumber, hexString: msg+aisle)
    }
    
    @IBAction func aiseChange(_ sender: UISegmentedControl) {
        print(sender.selectedSegmentIndex)
        self.aisle = "0\(sender.selectedSegmentIndex+1)"
    }
    
    func PLog(_ text:String){
        var log = logText.text!
        log = log + text + "\n"
        logText.text = log
    }

    @IBAction func clear() {
        self.logText.text = ""
    }

}

/// 实现蓝牙工具协议
extension ViewController:BluetoothToolsDelegate{
    // 连接成功
    func bluetoothTools(_ bluetoothTools: BDBluetoothTools, didConnect peripheral: CBPeripheral) {
        print("连接成功。。。。")
        PLog("连接成功")
    }
    
    //连接失败
    func bluetoothTools(_ bluetoothTools: BDBluetoothTools, didFailToConnect peripheral: CBPeripheral) {
        print("连接失败")
        PLog("连接失败")
    }
    
    // 断开连接
    func bluetoothTools(_ bluetoothTools: BDBluetoothTools, didDisconnectPeripheral peripheral: CBPeripheral) {
        print("断开连接")
        self.titleLabel.text = "未连接"
        PLog("北斗盒子断开连接")
    }
    
    /// 接收到盒子数据:明文
//    func bluetoothTools(_ bluetoothTools: BDBluetoothTools, didUpdateValueForObject object: [String : String]) {
//        // 如果是发送自定义十六进制数据--则这个方法是不会调用的
//        print("接收到盒子明文数据:")
//        print(object)
//    }
    
    //接收到盒子十六进制数据
    func bluetoothTools(_ bluetoothTools: BDBluetoothTools, didUpdateValueForHexString hexString: String) {
        print("接收到盒子十六进制数据:\(hexString)")
        /// 不管是 使用SDK提供的明文发送消息，还是自定义的十六进制发送数据，都会调用这个方法
        /// SDK提供的文明发送数据协议是以 "A4" 开头，所以协议头为A4代表是明文发送的。其他数据为自定义数据
        /// 建议在发送自定义数据的时候在十六进制数据头部加一个标识，已区分不同的数据类型
        PLog("接受到数据:\(hexString)")
    }
    
    // 发送结果
    func bluetoothTools(_ bluetoothTools: BDBluetoothTools, sendMessageReslut isError: Bool, message: String) {
        var text = ""
        if isError {
            text = "发送数据错误:\(message)"
            return;
        }
        text = "发送数据成功"
        print(text)
        PLog("发送数据成功")
        
    }
    
    // 发送频道倒计时
    func bluetoothTools(_ bluetoothTools: BDBluetoothTools, frequency countdown: Int) {
        print("请\(countdown)秒后才能重新发送")
        Countdown = countdown
//        PLog("请\(countdown)秒后才能重新发送")
        self.countdownLabel.text = "\(countdown)"
        self.countdownLabel.isHidden = countdown == 0
    }
    
    // 是否自定义频道倒计时，没隔一定的时间才可以发送一次报文 一般为60秒
    func bluetoothTools(_ bluetoothTools: BDBluetoothTools, customTimer frequency: Int) -> Bool {
        return false // 默认就是false 有SDK控制发送频道 - 不需要实现这个代理方法
    }
    
    // 由于盒子的信号和电池等等其他信息在不断变化，所以5秒会返回一次终端（盒子）的最新信息
    func bluetoothTools(_ bluetoothTools: BDBluetoothTools, updateZDXX box: BDBoxInfo) {
        // box 包含 盒子id 电量、卫星信号等等
        self.titleLabel.text = box.ID as String
        print("电量:\(box.electric)")
        if box.getSignalStatus() {
            print("当前盒子信号良好")
        }else{
            print("当前盒子信号不佳")
        }
    }
}
